package com.zh.business.vo.wechat;

import lombok.Data;
import lombok.experimental.Accessors;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * 描述: 微信申请退款返回结果类
 *
 * @author: yanglin
 * @Date: 2020-08-18-14:37
 * @Version: 1.0
 */
@Data
@Accessors(chain = true)
@XmlRootElement(name = "xml")
@XmlAccessorType(value = XmlAccessType.FIELD)
public class RefundRep {

    /**
     * 返回状态码
     * SUCCESS/FAIL
     * 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
     * Y
     */
    private String return_code;


    /**
     * 返回信息
     * 当return_code为FAIL时返回信息为错误原因 ，例如
     * 签名失败
     * 参数格式校验错误
     * Y
     */
    private String return_msg;

    /** 以下字段在return_code为SUCCESS的时候有返回 **/

    /**
     * 业务结果
     * Y
     */
    private String result_code;

    /**
     * 错误代码
     * 当result_code为FAIL时返回错误代码，详细参见下文错误列表
     * N
     */
    private String err_code;

    /**
     * 错误代码描述
     * 当result_code为FAIL时返回错误描述，详细参见下文错误列表
     * N
     */
    private String err_code_des;

    /**
     * 公众账号ID
     * 调用接口提交的公众账号ID
     * Y
     */
    private String appid;

    /**
     * 商户号
     * Y
     */
    private String mch_id;

    /**
     * 微信返回的随机字符串
     * Y
     */
    private String nonce_str;

    /**
     * 微信返回的签名值
     * Y
     */
    private String sign;

    /**
     * 微信支付订单号
     * Y
     */
    private String transaction_id;

    /**
     * 商户订单号
     * Y
     */
    private String out_trade_no;

    /**
     * 微信退款单号
     * Y
     */
    private String refund_id;

    /**
     * 退款金额
     * 退款总金额,单位为分,可以做部分退款
     * Y
     */
    private Integer refund_fee;

    /**
     * 应结退款金额
     * 去掉非充值代金券退款金额后的退款金额，退款金额=申请退款金额-非充值代金券退款金额，退款金额<=申请退款金额
     * N
     */
    private Integer settlement_refund_fee;

    /**
     * 标价金额
     * 订单总金额，单位为分，只能为整数，详见支付金额
     *
     */
    private Integer total_fee;

    /**
     * 应结订单金额
     * 去掉非充值代金券金额后的订单总金额，应结订单金额=订单金额-非充值代金券金额，应结订单金额<=订单金额。
     * N
     */
    private Integer settlement_total_fee;

    /**
     * 标价币种
     * 订单金额货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * N
     */
    private String fee_type;

    /**
     * 现金支付金额
     * 现金支付金额，单位为分，只能为整数，详见支付金额
     * Y
     */
    private Integer cash_fee;

    /**
     * 现金支付币种
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * N
     */
    private String cash_fee_type;

    /**
     * 现金退款金额
     * 现金退款金额，单位为分，只能为整数，详见支付金额
     * N
     */
    private Integer cash_refund_fee;

    /**
     * 代金券类型
     * CASH--充值代金券
     * NO_CASH---非充值代金券
     * 订单使用代金券时有返回（取值：CASH、NO_CASH）。$n为下标,从0开始编号，举例：coupon_type_0
     * N
     */
    private String coupon_type_$n;

    /**
     * 代金券退款总金额
     * 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠
     * N
     */
    private Integer coupon_refund_fee;

    /**
     * 单个代金券退款金额
     * 代金券退款金额<=退款金额，退款金额-代金券或立减优惠退款金额为现金，说明详见代金券或立减优惠
     * N
     */
    private Integer coupon_refund_fee_$n;

    /**
     * 退款代金券使用数量
     * N
     */
    private Integer coupon_refund_count;

    /**
     * 退款代金券ID
     * 退款代金券ID, $n为下标，从0开始编号
     * N
     */
    private String coupon_refund_id_$n;


    /**
     * 错误码
     * SYSTEMERROR	接口返回错误	系统超时等	请不要更换商户退款单号，请使用相同参数再次调用API。
     * BIZERR_NEED_RETRY	退款业务流程错误，需要商户触发重试来解决	并发情况下，业务被拒绝，商户重试即可解决	请不要更换商户退款单号，请使用相同参数再次调用API。
     * TRADE_OVERDUE	订单已经超过退款期限	订单已经超过可退款的最大期限(支付后一年内可退款)	请选择其他方式自行退款
     * ERROR	业务错误	申请退款业务发生错误	该错误都会返回具体的错误原因，请根据实际返回做相应处理。
     * USER_ACCOUNT_ABNORMAL	退款请求失败	用户帐号注销	此状态代表退款申请失败，商户可自行处理退款。
     * INVALID_REQ_TOO_MUCH	无效请求过多	连续错误请求数过多被系统短暂屏蔽	请检查业务是否正常，确认业务正常后请在1分钟后再来重试
     * NOTENOUGH	余额不足	商户可用退款余额不足	此状态代表退款申请失败，商户可根据具体的错误提示做相应的处理。
     * INVALID_TRANSACTIONID	无效transaction_id	请求参数未按指引进行填写	请求参数错误，检查原交易号是否存在或发起支付交易接口返回失败
     * PARAM_ERROR	参数错误	请求参数未按指引进行填写	请求参数错误，请重新检查再调用退款申请
     * APPID_NOT_EXIST	APPID不存在	参数中缺少APPID	请检查APPID是否正确
     * MCHID_NOT_EXIST	MCHID不存在	参数中缺少MCHID	请检查MCHID是否正确
     * ORDERNOTEXIST	订单号不存在	缺少有效的订单号	请检查你的订单号是否正确且是否已支付，未支付的订单不能发起退款
     * REQUIRE_POST_METHOD	请使用post方法	未使用post传递参数 	请检查请求参数是否通过post方法提交
     * SIGNERROR	签名错误	参数签名结果不正确	请检查签名参数和方法是否都符合签名算法要求
     * XML_FORMAT_ERROR	XML格式错误	XML格式错误	请检查XML参数格式是否正确
     * FREQUENCY_LIMITED	频率限制	2个月之前的订单申请退款有频率限制	该笔退款未受理，请降低频率后重试
     * NOAUTH	异常IP请求不予受理	请求ip异常	如果是动态ip，请登录商户平台后台关闭ip安全配置；
     * 如果是静态ip，请确认商户平台配置的请求ip 在不在配的ip列表里
     * CERT_ERROR	证书校验错误	请检查证书是否正确，证书是否过期或作废。	请检查证书是否正确，证书是否过期或作废。
     * REFUND_FEE_MISMATCH	订单金额或退款金额与之前请求不一致，请核实后再试	订单金额或退款金额与之前请求不一致，请核实后再试	订单金额或退款金额与之前请求不一致，请核实后再试
     * INVALID_REQUEST	请求参数符合参数格式，但不符合业务规则	此状态代表退款申请失败，商户可根据具体的错误提示做相应的处理。	此状态代表退款申请失败，商户可根据具体的错误提示做相应的处理。
     * ORDER_NOT_READY	订单处理中，暂时无法退款，请稍后再试	订单处理中，暂时无法退款，请稍后再试  	订单处理中，暂时无法退款，请稍后再试
     */

}
